/*!
 * \file tokens.h
 */
#ifndef _Ctokens_H_F9A642C3_AC64_48ED_8D94_AAA83B312853_INCLUDED_
#define _Ctokens_H_F9A642C3_AC64_48ED_8D94_AAA83B312853_INCLUDED_

/*!
 * \brief значения атрибута токенов TOKEN_*_OPERATION
 * все операторы собраны в одной таблице, доступной через функцию oper()
 */
enum Operator
{
//AssignOperation "+="|"-="|"*="|"/="|"="
  OPERATOR_PLUS_ASSIGN,
  OPERATOR_MINUS_ASSIGN,
  OPERATOR_MUL_ASSIGN,
  OPERATOR_DIV_ASSIGN,
  OPERATOR_ASSIGN,

//AddOperation [+-]
  OPERATOR_PLUS,
  OPERATOR_MINUS,

//MultOperation [*/]
  OPERATOR_MUL,
  OPERATOR_DIV,

//RelOperation [<>]|"=="|"!="|"<="|">="
  OPERATOR_LT,
  OPERATOR_GT,
  OPERATOR_EQ,
  OPERATOR_NE,
  OPERATOR_LE,
  OPERATOR_GE,

//UnaryOperation "++"|"--"
  OPERATOR_INC,
  OPERATOR_DEC,

};

/*!
 * \brief значения атрибута токенов TOKEN_TYPE_BASE и TOKEN_BOOL
 */
enum Keyword
{
//TypeBase "int"|"float"|"bool"
  KEYWORD_INT,
  KEYWORD_FLOAT,
  KEYWORD_BOOL,

//BooleanLiteral "true"|"false"
  KEYWORD_TRUE,
  KEYWORD_FALSE,

};

/*!
 * \brief установить атрибут в значение считанного разделителя
 */
void separator(const char *p);
/*!
 * \brief занести целочисленную константу в таблицу, установить атрибут в значение индекса в таблице
 */
int integerConst(const char *p);
int integerConst(int v);
/*!
 * \brief занести плавающую константу в таблицу, установить атрибут в значение индекса в таблице
 */
int floatingConst(const char *p);
int floatingConst(float v);
/*!
 * \brief занести идентификатор в таблицу, установить атрибут в значение индекса в таблице
 */
void identifier(const char *p);
/*!
 * \brief установить атрибут в значение индекса оператора в таблице
 */
void oper(const char *p);
/*!
 * \brief установить атрибут в значение индекса ключевого слова в таблице
 */
void keyword(const char *p);

extern int lineNo;

/*!
 * \brief получить значение целочисленной константы по индексу
 */
int getIntegerConst(int attr);
/*!
 * \brief получить значение плавающей константы по индексу
 */
float getFloatingConst(int attr);
/*!
 * \brief получить значение идентификатора по индексу
 */
const char* getIdentifier(int attr);

#endif //_Ctokens_H_F9A642C3_AC64_48ED_8D94_AAA83B312853_INCLUDED_
